import {
  reqIndex,
  reqServeDetailTwo,
  reqShowDetailTwo,
  reqMessageBoard,
  reqDetailTwoTitleImages,
  reqDecorationType,
  reqOtherType,
} from '../../utils/api.js'

import {
  getReqData,
  formatTimeTwo,
  checkName,
  checkTelephone,
  checkTextarea,
} from '../../utils/util.js'

const app = getApp()

Page({
  data: {
    base_img_url: app.globalData.BASE_IMG_URL,
    titleDatas: ['永昌服务', '案例展示', '资讯中心', '关于永昌'],
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    loading: true,
    hideSwiper: false,
    hideNav: false,
    hideContent: false,
  },
  progressiveLoad() {
    setTimeout(() => {
      this.setData({
        hideNav: true
      })
    }, 1000)
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: async function (options) {

    wx.showLoading({
      title: '请稍后...',
    })

    this.progressiveLoad()

    const {
      result
    } = await reqIndex()
    const data = getReqData(result)
    if (!data) return null

    // 咨询中心中的时间格式化
    const tempData = this.formatAskTime(data);

    // 设置全局变量 indexData
    app.globalData.indexData = {
      ...tempData
    };

    this.setData({
      ...tempData
    })

    await this.initOtherData()

    wx.hideLoading()
  },
  initOtherData: async function () {
    // 获取标题图片
    const {
      result: resultDetailTwoTitleImages
    } = await reqDetailTwoTitleImages()
    const titleImagesDetailTwo = getReqData(resultDetailTwoTitleImages)
    if (titleImagesDetailTwo)
      app.globalData.titleImagesDetailTwo = titleImagesDetailTwo
    this.setData({
      titleImagesDetailTwo,
      hideSwiper: true
    })
    // 获取装修种类下面的所有分类 
    const {
      result: resultDecorationType
    } = await reqDecorationType()
    const resultDecorationTypeData = getReqData(resultDecorationType)
    if (resultDecorationTypeData)
      // app.globalData.decorationType = resultDecorationTypeData
      this.setData({
        decorationType: resultDecorationTypeData
      })
    // 获取其他种类下面的所有分类 
    const {
      result: resultOtherType
    } = await reqOtherType()
    const resultOtherTypeData = getReqData(resultOtherType)
    if (resultOtherTypeData)
      // app.globalData.otherType = resultOtherTypeData
      this.setData({
        otherType: resultOtherTypeData,
        hideContent: true,
        loading: false
      })
  },
  /**
   * 点击轮播图中的图片
   */
  onMySwiperEvent: function (e) {
    // console.log('点击轮播图中的图片', e)
    const {
      index
    } = e.detail

    wx.navigateTo({
      url: '/pages/detail_one/detail_one?index=' + index,
    })
  },
  /**
   * 导航栏
   */
  toNavLink: function (e) {
    const {
      index
    } = e.currentTarget.dataset

    switch (index) {
      case 0:
        this.toServeLink();
        break;
      case 1:
        this.toShowLink();
        break;
      case 2:
        this.toAskLink();
        break;
      case 3:
        this.toAboutLink();
        break;
      case 4:
        this.toContactUs();
        break;
      default:
        break;
    }
  },
  /**
   * 永昌服务
   */
  toServeLink: async function () {
    // 这里的index 是 标题图片的下标。
    // const index = 'images_serve'
    // bar 的文字
    const barName = this.data.listNav[0].text

    // 获取标题图片
    const {
      images_serve
    } = this.data.titleImagesDetailTwo[0]

    // todo 剩下的数据
    const {
      result
    } = await reqServeDetailTwo()
    // 获取剩下的数据
    let content_list = getReqData(result)

    // 根据装修种类,提取数据生成 tab_list
    const {
      otherType
    } = this.data

    let tab_list = ['全部']

    // ‘全部’，包含所有的数据，各个标签种类包含他们本身的数据。
    let temp_content_list = [
      [...content_list]
    ]

    // 这里只会提取 团队 这部分信息
    otherType.forEach(dItem => {
      let temp_list = []
      content_list.forEach(cItem => {
        let {
          cascaderText
        } = cItem

        // 提取数据生成 tab_list
        if (cascaderText && cascaderText !== "" && dItem.name === cascaderText.split('/')[1]) {
          tab_list.push(dItem.name)
          // ‘全部’，包含所有的数据，各个装修种类包含他们本身的数据。
          temp_list.push(cItem)
        }
      })
      if (temp_list.length > 0)
        temp_content_list.push(temp_list)
    })

    wx.navigateTo({
      url: `/pages/detail_two/detail_two`,
      success: function (res) {
        // 通过eventChannel向被打开页面传送数据
        res.eventChannel.emit('acceptDataFromIndexPage', {
          barName,
          title_url: app.globalData.BASE_IMG_URL + images_serve[0],
          content_list: temp_content_list,
          tab_list,
          data_index: 'listServe'
        })
      }
    })
  },
  /**
   * 点击永昌服务下面的item
   */
  toServeItem: function (item) {
    const {
      index
    } = item.currentTarget.dataset

    this.toDetailOneFormatData(index, 'listServe')
  },
  /**
   * 案例展示
   */
  toShowLink: async function () {
    const barName = this.data.listNav[1].text

    // 获取标题图片
    const {
      images_show
    } = this.data.titleImagesDetailTwo[0]

    // 剩下的数据
    const {
      result
    } = await reqShowDetailTwo()
    // 获取剩下的数据
    let content_list = getReqData(result)

    // 根据装修种类,提取数据生成 tab_list
    const {
      decorationType
    } = this.data
    let tab_list = ['全部']

    // ‘全部’，包含所有的数据，各个装修种类包含他们本身的数据。
    let temp_content_list = [
      [...content_list]
    ]
    decorationType.forEach(dItem => {
      let temp_list = []
      content_list.forEach(cItem => {
        // 提取数据生成 tab_list
        if (dItem.name === cItem.cascaderText.split('/')[1]) {
          tab_list.push(dItem.name)
          // ‘全部’，包含所有的数据，各个装修种类包含他们本身的数据。
          temp_list.push(cItem)
        }
      })
      if (temp_list.length > 0)
        temp_content_list.push(temp_list)
    })

    wx.navigateTo({
      url: `/pages/detail_two/detail_two`,
      success: function (res) {
        // 通过eventChannel向被打开页面传送数据
        res.eventChannel.emit('acceptDataFromIndexPage', {
          barName,
          title_url: app.globalData.BASE_IMG_URL + images_show[0],
          content_list: temp_content_list,
          tab_list,
          data_index: 'listShow'
        })
      }
    })
  },
  /**
   * 案例展示下面的item
   */
  toShowItem: function (item) {
    const {
      index
    } = item.currentTarget.dataset

    this.toDetailOneFormatData(index, 'listShow')
  },
  /**
   * 资讯中心
   */
  toAskLink: function () {
    // bar 的文字
    const barName = this.data.listNav[2].text

    // 获取标题图片
    const {
      images_ask
    } = this.data.titleImagesDetailTwo[0]

    // 获取剩下的数据
    let content_list = app.globalData.indexData.listAsk

    wx.navigateTo({
      url: `/pages/detail_two/detail_two`,
      success: function (res) {
        res.eventChannel.emit('acceptDataFromIndexPage', {
          barName,
          title_url: app.globalData.BASE_IMG_URL + images_ask[0],
          content_list,
          data_index: 'listAsk'
        })
      }
    })
  },
  /**
   * 点击咨询中心下面的文章
   */
  toAskItem: function (item) {
    // console.log('资讯中心item', item)
    const {
      index
    } = item.currentTarget.dataset

    this.toDetailOneFormatData(index, 'listAsk')
  },
  /**
   * 关于永昌
   */
  toAboutLink: function () {
    const barName = this.data.listNav[3].text
    this.toDetailOneFormatData(0, 'listAbout', barName)
  },
  /**
   * 联系我们
   */
  toContactUs: function (item) {
    // console.log('联系我们')
    wx.navigateTo({
      url: '/pages/detail_contact_us/detail_contact_us'
    })
  },
  /**
   * 留言板提交
   */
  blogFormSubmit: async function (e) {
    const {
      name,
      phone,
      textarea
    } = e.detail.value;
    // if (!name || !phone || !textarea) return;
    // 检查姓名、手机号是否合法
    const resultInfo = this.checkMessageBoardInfo(e)
    if (!resultInfo.flag) {
      wx.showModal({
        title: '提示',
        content: resultInfo.msg
      })

      return false;
    }
    // 检查登录状态。
    const resultAuth = this.checkAuth()
    if (resultAuth) {
      const {
        userInfo
      } = app.globalData

      const {
        result
      } = await reqMessageBoard({
        userInfo,
        name,
        phone,
        textarea
      })

      const data = getReqData(result)

      wx.showToast({
        title: !data ? '留言失败' : '留言成功',
      })
    }
  },
  /**
   * 是否已经有用户信息，并且可以使用这些信息
   */
  checkAuth: function () {
    const {
      canIUse
    } = this.data

    if (null === app.globalData.userInfo) {
      wx.getSetting({
        success(res) {
          if (res.authSetting['scope.userInfo']) {
            // 已经授权，可以直接调用 getUserInfo 获取头像昵称
            wx.getUserInfo({
              success: function (res) {
                console.log('成功获取 userInfo', res.userInfo)
                this.globalData.userInfo = res.userInfo
              }
            })
          }
        }
      })
    }

    // return app.globalData.userInfo && canIUse
    return app.globalData.userInfo && canIUse
  },
  /**
   * 检查手机号是否合法，检查输入的建议是否合法。
   */
  checkMessageBoardInfo: function (e) {
    const {
      name,
      phone,
      textarea
    } = e.detail.value;

    const resultCheckName = checkName(name)
    if (!resultCheckName.flag) return resultCheckName

    const resultCheckTelephone = checkTelephone(phone)
    if (!resultCheckTelephone.flag) return resultCheckTelephone

    const resultCheckTextarea = checkTextarea(textarea)
    if (!resultCheckTextarea.flag) return resultCheckTextarea

    return {
      flag: true,
      msg: ""
    };
  },
  /**
   * 成功获取用户信息
   */
  getUserInfo: function (e) {
    // console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo
    })
  },
  /**
   * 格式化资讯中心的时间
   */
  formatAskTime: function (data) {
    const result = data.listAsk.map(item => {
      item.time = formatTimeTwo(item.time)
      return item
    })
    data.listAsk = result
    return data
  },
  /**
   * 跳转到detail_one的数据转化
   * index 0,1,2
   * listIndex listServe 等
   */
  toDetailOneFormatData: function (index, listIndex, tempBarName) {
    const info = app.globalData.indexData[listIndex][index]
    const barName = tempBarName ? tempBarName : this.data.listNav[index].text

    let newInfo = {
      ...info,
      barName
    }
    newInfo.imgs = info.img_list ? info.img_list.map(item => (app.globalData.BASE_IMG_URL + item)) : null
    newInfo.img_list = null
    newInfo.article = info.text.article
    newInfo.articleText = info.text.articleText ? info.text.articleText : null
    newInfo.title = info.text.title
    newInfo.time = info.time ? info.time : null

    wx.navigateTo({
      url: '/pages/detail_one/detail_one',
      success: function (res) {
        // 通过eventChannel向被打开页面传送数据
        res.eventChannel.emit('acceptDataFromIndexPage', {
          ...newInfo
        })
      }
    })
  }
})